package com.flyfish.ddns.send;

import java.io.IOException;
import java.util.List;

import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsRequest;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsResponse;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsResponse.Record;
import com.flyfish.ddns.utils.CustomSystemUtil;
import com.flyfish.ddns.utils.DdnsUtils;
import com.flyfish.ddns.utils.PropertiesUtil;
import com.flyfish.ddns.utils.WriteLog;
import com.flyfish.ddns.vo.AliyunVo;

/**
 * 根据传入参数获取解析记录列表。 查询可以指定域名（DomainName）、页码（PageNumber）和每页的数量（PageSize）来获取域名的解析列表。
 * 查询可以指定解析记录的主机记录关键字（RRKeyWord）、解析类型关键字（TypeKeyWord）或者记录值的关键字（ValueKeyWord）来查询含有该关键字的解析列表。
 * 解析列表的默认排序方式是按照解析添加的时间从新到旧排序的。
 * 
 * @author tanchong
 *
 */
public class UpdateDomainRecord {

	/**
	 * 设置参数
	 * 
	 * @param request
	 */
	public void setParam(DescribeDomainRecordsRequest request) {
		// 循环设置参数
		String domainName = PropertiesUtil.getProperty("DomainName");
		request.putQueryParameter("DomainName", domainName);
	}

	/**
	 * 解析DNS信息
	 */
	public void analysisDns() {
		try {
			// 获取公网ip
			String ipV4 = CustomSystemUtil.getV4IP();
			// 获取解析的数据
			String actionName = "DescribeDomainRecords";
			DescribeDomainRecordsResponse response;
			// 获取request
			DescribeDomainRecordsRequest request = DdnsUtils.getRequestQuery(actionName);
			// 设置request参数
			setParam(request);
			response = DdnsUtils.getClient().getAcsResponse(request);
			// 声明解析对象
			DemoListDomains demo = new DemoListDomains();
			// 获取阿里云的数据
			List<Record> list = response.getDomainRecords();
			if (list == null || list.isEmpty()) {
				return;
			}
			// 循环更新ip
			for (Record record : list) {
				AliyunVo yunVo = new AliyunVo();
				// 进行判定每条记录是否正常
				if (record.getValue().equals(ipV4)) {
					// 不需要更新，继续下次循环
					WriteLog.writeLogInfo("当前域名解析地址为：" + ipV4 + "不需要更新！");
					continue;
				}
				// 进行替换关键数据
				yunVo.setIpV4(ipV4);
				yunVo.setRecordId(record.getRecordId());
				yunVo.setRr(record.getRR());
				yunVo.setTTL(record.getTTL());
				yunVo.setType(record.getType());
				WriteLog.writeLogInfo("域名更换ip开始");
				demo.analysisDns(yunVo);
				WriteLog.writeLogInfo("域名更换ip结束");
			}
		} catch (Exception e) {
			// e.printStackTrace();
			try {
				WriteLog.writeLogInfo("域名更换异常" + e.getMessage());
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
	}
}
